[C#] 從詐騙註記詞測試 TronLink 預設錢包的還原機制

2025-01-07

通常現在創建錢包不管是 ETH 或是 TRON 基本上都是基於 BIP39 使用 12 , 24 當作註記詞創建錢包

最近在測試一個詐騙的東西想用程式端去還原錢包,發現 ERC20 和 TRC20 預設的 Path 是不一樣的


基本上這篇範例基於這組 註記詞  alarm fetch churn bridge exercise tape speak race clerk couch crater letter

請注意這是一組詐騙的註記詞,不要往裡面的錢包轉帳打款

1. 安裝 Nethereum.HdWallet

預設的 ERC20 位置會是 m/44'/60'/0'/0 但是 TRC20 預設是 m/44'/195'/0'/0

C# Code:

//這是詐騙註記詞請勿使用 //This is a scam seed phrase. Do not use it. var words = "alarm fetch churn bridge exercise tape speak race clerk couch crater letter"; var wallet1 = new Nethereum.HdWallet.Wallet(words, null, "m/44'/195'/0'/0"); var account = wallet1.GetAccount(0); var trxAddress = WalletUtil.GetBase58CheckAddress(account.Address); _Result = trxAddress; //This is a scam wallet. Do not use it. //Result: TS64QAQEL5GfbB61C86ZSJjfkVi6kPFmEA



基本上,因為透過 TronLink or METAMASK 那一段在程式內是不用設定 password 的直接填寫 null , TRC20 用的 Path  是不同的

其他的就大同小異 可以參考我之前的文章 https://blog.no2don.com/2021/11/c-trx-eth-nethereum.html

C# 轉換 ERC20 Wallet to TRC20 Wallet Code:

public class WalletUtil { public static string GetMoneyString(decimal number, int maxLessDigNum = 2) { if (number == 0) { return "0"; } if (number.ToString().Contains(".")) { var format = "#,###,###,####."; var tmpDot = number.ToString().Split('.')[1]; var max = maxLessDigNum; if (tmpDot.Length < max) { max = tmpDot.Length; } for (var i = 0; i < max; i++) { format += "#"; } return number.ToString(format); } else { return number.ToString("#,###,###,####"); } } public static Nethereum.Web3.Accounts.Account GetHDWalletInfoByIndex(string words, string password, int index) { return new Nethereum.HdWallet.Wallet(words, password).GetAccount(index); } public static string GetBase58CheckAddress(string ethAddress) { string fixaddress = "0x41" + TronNet.ByteArrary.RemoveHexPrefix(ethAddress); byte[] addressBytes = TronNet.ByteArrary.HexToByteArray(fixaddress); byte[] hash0 = ToSHA256(addressBytes); byte[] hash1 = ToSHA256(hash0); var checkSum = hash1.Take(4).ToArray(); return Base58Encoding.Encode(addressBytes.Concat(checkSum).ToArray()); } public static byte[] ToSHA256(byte[] data) { using (var alg = SHA256.Create()) { var hashValue = alg.ComputeHash(data); return hashValue; } } public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) { System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime(); return dtDateTime; } public static long GetCurrentBlock(IServiceCollection tronService) { IServiceCollection services = new ServiceCollection(); IServiceCollection _TronServiceNile = new ServiceCollection(); services = tronService; services.AddLogging(); var service = services.BuildServiceProvider(); var newestBlock = service.GetService<IWalletClient>().GetProtocol().GetNowBlock(new TronNet.Protocol.EmptyMessage()); return newestBlock.BlockHeader.RawData.Number; } }


請注意這範例結果的錢包 TS64QAQEL5GfbB61C86ZSJjfkVi6kPFmEA 是詐騙錢包
你去 Tron Scan 上面看 他會有警告,該錢包是授權另一個錢包全權管理,就算你有註記詞有私鑰你也無法去動裡面的錢


主要是因為要測試一些東西需要取得 TronLink 使用註記詞產出的錢包,剛好看到詐騙的註記詞就拿來測試了







當麻許的碎念筆記 2014 | Donma Hsu Design.